package com.tedu.api.thread;

/**
 * 线程常用方法三
 * 创建普通线程，叫用户线程/前台线程
 *
 * 软件【聊天室】“工厂” ---- "车间"进程【若干进程】 --- “车间工人”线程
 * 线程关闭---所有的用户线程全都挂了,进程关闭
 * 所有用户线程全部挂了,进程一定结束
 *
 * 用户线程/前台线程与后台线程/守护线程的区别:
 * 用户线程/前台线程   挂了   后台线程/守护线程  挂调
 *
 * 出现:守护线程又执行  [问题]
 * 守护线程特性:
 * 守护线程的执行是由JVM虚拟机调度以及操作系统相关[调度策略管理],
 * 存在不可预知性,前台线程挂了,守护线程阻塞状态中短时间内迅速调动1次
 *
 * 设置守护线程  线程名 .setDaemon(true)  守护线程
 * 基本API：isDaemon 判断线程是否守护线程
 * 需求：创建两个线程 t1 代表 露丝  ---阻塞1秒  5秒 挂了
 *                 t2 代表 杰克  ---阻塞2秒  t1挂了  t2也挂了
 */
public class Thread_Daemon {
    public static void main(String[] args) {
        //t1线程--露丝
        Thread t1=new Thread(()->{
            for (int i=0;i<5;i++){
                System.out.println("我是前台线程：露丝·德威特·布卡特");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("程序结束~");
        });
        //t2线程：杰克
        Thread t2=new Thread(()->{
            //添加 死循环 ：每一次间隔1秒
            while(true){
                System.out.println("我是后台/守护线程：杰克·道森");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        /**
         * t2 杰克  设置为守护线程
         *    t1 执行5次  线程挂了
         *    t2 一直执行  设置守护线程 t1挂  t2跟着挂
         */
        t2.setDaemon(true);  //t2 守护线程
        t1.start();//必须写--启动线程:写在最后，而且所有线程都需要启动
        t2.start();//启动线程->找到引用.start();
    }
}
